/**
 *封装(复用)全局axios请求方法
 *步骤:
 *1.导入axios
 *2.使用axios.create()方法创建新axios实例
 *3.给新创建的axios实例添加请求和响应拦截器
 *4.导出创建的新axios实例
 */
import axios from 'axios'

import store from '../store'

const request = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0/'
})

// 添加请求拦截器 => 发请求之前执行
// 发请求之前正确走第一个,发请求错误走第二个
// config:文件自带,是请求的配置里面有登录的路径,参数等
request.interceptors.request.use(function (config) {
  console.log('发送请求之前:', config)
  // 在发送请求之前做些什么  => 统一给header添加token
  /**
   * 1.有token
   * 2.不是登录,注册登录接口
   * 采取添加haders的token
   * config.headers :请求的地址
   */
  //  config.url:文档登录接口的路径
  // store.state.user.token直接把user路径里面的token点出来
  if (store.state.user.token && config.url !== 'authorizations') {
    // config.headers :headers是请求头,往这里面是追加不是赋值 ,同时config.headers 是个对象{},具体怎么追加?根据后台文档添加请求头等之类的
    // Authorization:请求头, 然后给请求头这个字段赋个值就是token,token通过store.state.user.token去拿
    // 这里的大白话就是,请求登录的数据有token,但是没有请求头(因为请求头每发一次都要添加一个请求头,所以拦截器检测到请求登录的没有请求头就统一添加上)
    config.headers.Authorization = `Bearer ${store.state.user.token}`// 这样就把token追加上了
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器=>请求发送之后,后端响应了执行了=> 拦截器先拿到的response数据
request.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  //  return response页面拿到的是一大堆数据,可以简化返回给页面一下
  const _data = {
    // status:状态码,在页面输入台可以看到
    status: response.status,
    // data数据
    data: response.data.data
  }
  // 把data返回给页面
  return _data
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error)
})

export default request
